let root = self.ws.members().max_by_key(|member| {
member.name()
- }).unwrap().package_id();
+ }).map(Package::package_id);
let encodable = ids.iter().filter_map(|&id| {
- if self.use_root_key && root == id {
- return None
+ match root {
+ Some(ref root) if !(self.use_root_key && *root == id) => {
+ Some(encodable_resolve_node(id, self.resolve))
+ },
+ _ => None,
}
-
- Some(encodable_resolve_node(id, self.resolve))
}).collect::<Vec<_>>();
let mut metadata = self.resolve.metadata.clone();
let metadata = if metadata.len() == 0 {None} else {Some(metadata)};
- let root = if self.use_root_key {
- Some(encodable_resolve_node(&root, self.resolve))
- } else {
- None
+ let root = match root {
+ Some(root) if self.use_root_key => Some(encodable_resolve_node(&root, self.resolve)),
+ _ => None,
};
EncodableResolve {
package: Some(encodable),
#[test]
fn virtual_build() {
+ let p = project("foo")
+ .file("Cargo.toml", r#"
+ [workspace]
+ members = ["bar"]
+ "#)
+ .file("bar/Cargo.toml", r#"
+ [project]
+ name = "bar"
+ version = "0.1.0"
+ authors = []
+ "#)
+ .file("bar/src/main.rs", "fn main() {}");
+ p.build();
+ assert_that(p.cargo("build"),
+ execs().with_status(101)
+ .with_stderr("\
+error: manifest path `[..]` is a virtual manifest, but this command \
+requires running against an actual package in this workspace
+"));
+}
+
+#[test]
+fn virtual_build_no_members() {
let p = project("foo")
.file("Cargo.toml", r#"
[workspace]